package com.lottemall.common.advice;

import com.lottemall.common.enums.ExceptionEnume;
import com.lottemall.common.exception.LtException;
import com.lottemall.common.vo.ExceptionResult;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

/**
 * 通用的统一处理异常的类
 */
@ControllerAdvice //默认情况下这个注解可以拦截所有的Controller请求 （拦截前提注意Controller类的包 ）
public class CommonExceptionHandler {

    /**
     * 统一拦截Controller抛出的LtException自定义异常
     * @param e
     * @T : ExceptionResult是统一的错误返回格式
     * @return
     */
    @ExceptionHandler(LtException.class)
    public ResponseEntity<ExceptionResult> handleException(LtException e){
        //得到这个自定义错误类中的枚举类
        ExceptionEnume em = e.getExceptionEnume();
        //通过枚举类中的属性得到状态码400
        return ResponseEntity.status(em.getCode()).body(new ExceptionResult(em));
    }
}
